# coding:utf-8
'''
Created on 2011-3-31
第四阶段
将单词复数化的简单模块。复数化原则：
1.如果一个单词以S、X或Z结尾，加ES。
2.如果一个单词以发音的H结尾，加ES；若以不发音的H结尾，加S。
3.如果一个单词以发I音的Y几位，把Y变IES；如果Y与元音搭配在一起发出其他声音的则只加S。
4.如果一起规则都不适用，就只添加S。
@author: Administrator
'''
import re

def buildMatchAndApplyFunc((pattern, search, replace)):
    matchFunction = lambda word: re.search(pattern, word)
    applyFunction = lambda word: re.sub(search, replace, word)
    return (matchFunction, applyFunction)

patterns = \
  (
    ('[sxz]$', '$', 'es'),
    ('[^aeioudgkprt]h$', '$', 'es'),
    ('(qu|[^aeiou])y$', 'y$', 'ies'),
    ('$', '$', 's')
  )
rules = map(buildMatchAndApplyFunc, patterns) 

def plural(noun):
    for matchRule, applyRule in rules:
        if matchRule(noun):
            return applyRule(noun)
        
print plural('boy')
print plural('man')
print plural('factory')
